package com.javabasic.algorithm.leetcode;

/**
 * @Author xiongmin
 * @Description //TODO
 * @Date 2020/2/6 14:22
 * @Version 1.0
 **/
public class SimplifyPath {

    /**
     * 方法一： 暴力解法
     * 方法二： 使用Stack -- 将每一个目录名字分别作为一个元素放在stack中，碰到 .. 就取出栈顶元素， . 就忽略继续执行 ，
     * 最后输出栈中的元素[栈顶元素是最后一个目录，栈首是第一个目录]，如果栈为空就输出 /
     * @param path
     * @return
     */
    public String simplifyPath(String path) {
        path += "/";
        path = shortPath(path);
        System.out.println(path);
        int len = path.length();
        String result = "/";
        int tag =1, nowTag;
        while (tag < len && (nowTag = path.indexOf("/", tag)) >= 0) {
            String substring = path.substring(tag, nowTag);
            if (substring.equals("..")) {
               if (result.equals("/") == false) {
                   int i = result.lastIndexOf("/");
                   if (i == 0) {
                       result = "/";
                   } else {
                       result = result.substring(0,i);
                   }
               }
           } else if (substring.equals(".")) {

           } else  {
                if (result.equals("/")) {
                    result += substring;
                } else  {
                    result += "/" + substring;
                }
           }
           tag = nowTag+1;
        }
        return result;
    }

    private String shortPath(String path) {
        System.out.println(path);
        StringBuilder str = new StringBuilder("");
        int len = path.length();
        boolean flag = false;
        for (int i = 0; i < len; i++) {
            if (path.charAt(i) == '/') {
                if (flag) {
                    continue;
                } else {
                    str.append("/");
                    flag = true;
                }
            } else  {
                flag = false;
                str.append(path.charAt(i));
            }
        }
        return str.toString();
    }
}
